package day11;

import java.util.*;

public class LCA {
    /**
     * 最近公共祖先
     */
    /**
     * 将一棵无穷人满二叉树的结点按根结点一层一层地从左往右编号，根结点编号为1。
     * 现给定a，b为两个结点。设计一个算法，返回a、b最近的公共祖先的编号。
     * 注意其祖先也可能是结点本身。
     * @param a
     * @param b
     * @return
     */
//    public int getLCA(int a, int b) {
//        if (a == 0 && b == 0){
//            return 0;
//        }else if (a == 0 && b != 0){
//            return b;
//        }else if (b == 0 && a != 0){
//            return a;
//        }
//        int m = Math.max(a,b);
//        int count = 0;
//        while (m != 0){
//            m >>= 1;
//            count++;
//        }
//        int count1 = count - 1;
//        int end = 0;
//        while (true) {
//            if (a > Math.pow(2, count1) && b > Math.pow(2, count1)) {
//                a = a / 2;
//                b = b / 2;
//                if (a == b){
//                    return a;
//                }
//            } else if (a < Math.pow(2, count1) && b > Math.pow(2, count1)) {
//                b = b / 2;
//            } else if (a > Math.pow(2, count1) && b < Math.pow(2, count1)) {
//                a = a / 2;
//            }
//        }
//    }
    public int getLCA(int a, int b) {
        while(a != b)
        {
            if(a > b)
                a /= 2;
            else
                b /= 2;
        }
        return a;
    }
}